20.5.3 远程调试通道

Java的远程调试在诊断远程应用问题时很有用,不幸的是,当应用部署在你的数据中心外时,它并不总能够启用远程调试。如果你使用基于容器的技术,比如Docker,远程调试设置起来非常麻烦。

为了突破这些限制,devtools支持基于HTTP的远程调试通道。远程客户端在8000端口提供一个本地server,这样远程debugger就可以连接了。一旦连接建立,调试信息就通过HTTP发送到远程应用。你可以使用spring.devtools.remote.debug.local-port属性设置不同的端口。

你需要确保远程应用启动时开启了远程调试功能,通常,这可以通过配置JAVA_OPTS实现,例如,对于Cloud Foundry,你可以将以下内容添加到manifest.yml:

---
  env:
    JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"

注意你不需要传递一个address=NNNN的配置项到-Xrunjdwp,如果遗漏了,java会使用一个随机可用端口。

调试基于Internet的远程服务可能很慢,你可能需要增加IDE的超时时间。例如,在Eclipse中你可以从Preferences…选择Java -> Debug,改变Debugger timeout (ms)为更合适的值(60000在多数情况下就能解决)。